<?php
/** Copyright 2014 TinPhp Systems, Inc.
 * @author zhangxilian 2013-8-20
 * @package TinPhp
 */
require_once (TIN_APP_PATH . "configs/site.conf.php");
/** 简单的单台Memcache服务器处理类
 * DEMO
$txt = TinMemcache::get("string");
if(!$txt){
	TinMemcache::set("string", array(11, 12), 300);
	echo date("Y-m-d H:i:s",time())." <font color=red>create cache</font>";
}else{
	echo date("Y-m-d H:i:s",time())."get cache";
}
var_dump($txt);
* */
class TinMemcache {
	const HOST = MEMCACHE_HOST;
	const PORT = 11211;
    /** 是否启用压缩存储，默认false */
	const MEMCACHE_COMPRESSED = FALSE;
	const CONNECT_TIMEOUT = 2; //创建Memcache链接超时时间(秒)
	const DEFAULT_EXPIRED = 1800; //默认缓存时间(秒)
	const LOCK_TIMEOUT = 3; //设置锁定KEY有效时间(秒)
	const LOCK_KEY = 'TIN_MEM_LOCK';    //默认的锁定KEY名称

//	function TinMemcache() {
//	}
	/**
	 * 设置Memcache缓存
	 * @param string $key 缓存KEY名称
	 * @param string $value 缓存数据
	 * @param int $expired 有效时间(秒)，默认1800
	 * @return bool 返回true、false
	 * */
	public static function set($key, $value, $expired = null) {
		if (!$expired || !is_numeric($expired)) {
			$expired = TinMemcache::DEFAULT_EXPIRED;
		}
		$cache = & TinMemcache::getCache();
		if ($cache) {
			return $cache->set($key, $value, TinMemcache::MEMCACHE_COMPRESSED, $expired);
		} else {
			return FALSE;
		}
	}
	/** 根据缓存KEY获取Memcache缓存数据
	 * @param string $key 缓存KEY名称
	 * @return object 没有数据返回null
	 * */
	public static function get($key) {
		$cache = & TinMemcache::getCache();
		if ($cache) {
			$result = $cache->get($key);
			return $result;
		} else {
			return null;
		}
	}
    /** 删除指定Key的Memcache值
     * @param string $key 缓存KEY名称 */
	public static function del($key) {
		$cache = & TinMemcache::getCache();
		if ($cache) {
			return $cache->delete($key);
		}
		return false;
	}
    /** 清空所有Memcache缓存 */
	public static function flush() {
		$cache = & TinMemcache::getCache();
		if ($cache) {
			return $cache->flush();
		} else {
			return false;
		}
	}
    /** 创建一个Memcache Key的锁定值
     * @param string $key 缓存KEY名称 */
	public static function lock($key) {
		$cache = & TinMemcache::getCache();
		return $cache->add(self :: LOCK_KEY . $key, 1, FALSE, self :: LOCK_TIMEOUT);
	}
    /** 解锁一个Memcache Key的值，实际既是删除
     * @param string $key 缓存KEY名称 */
	public static function unlock($key) {
		$cache = & TinMemcache::getCache();
		$cache->delete(self :: LOCK_KEY . $key);
	}    
    /** 获取Memcache服务器链接对象 */
	protected static function & getCache() {
		$cache = new Memcache();
		if (!$cache->connect(TinMemcache :: HOST, TinMemcache :: PORT, TinMemcache :: CONNECT_TIMEOUT)) {
			return FALSE;
		} else {
			return $cache;
		}
	}

} //End Class
?>